*BEGIN WORDS VERSION=500/320 ENCODING=7BIT
<Applix Words>
<asc @(#)% matt 9                 
>
<Globals levelIndent:500 hyphMethod:2 facingPages headerMargin:250 footerMargin\
 :250 changeBarPos:0>
<start_styles>
<style "Normal" no-pageBreak no-keepWith no-block justifyLeft indentToLevel spe\
 llcheck firstIndent:0 leftIndent:0 rightIndent:0 lineSpacingMode2:6 lineSpacin\
 gMode:0 lineSpacingCountHeight:1000 lineSpacingSep:0 preParaSpacing:0 postPara\
 Spacing:0 level:0 hyphZone:250 hyphMinFrag:2  no-bold no-italic no-strikethru \
 no-hidden no-caps no-underline hyphenate color:"Black" face:"Helvetica" size:1\
 2 position:0 tag:""  lB:0:0:"" rB:0:0:"" tB:0:0:"" bB:0:0:"" hB:0:0:"" vB:0:0:\
 "" shading:18:"":"":"" horizontalMargin:0 verticalMargin:0 dropShadow:0  local\
 Tabs  noFrame  >
<style "Address" parent "Recipient" nextStyle "AddressNext" >
<style "AddressLast" parent "Recipient" nextStyle "Salutation" postParaSpacing:\
 250  >
<style "AddressNext" parent "Recipient" nextStyle "AddressLast" >
<style "Bullet" parent "Paragraph" glossary "Bullet" leftIndent:250  localTabs \
 lT:250  >
<style "BulletPara" parent "Bullet" firstIndent:0 leftIndent:250  localTabs lT:\
 250  >
<style "CC" parent "Paragraph" glossary "CC" nextStyle "CC_Continue" postParaSp\
 acing:0  >
<style "CC_Continue" parent "CC" firstIndent:500 leftIndent:500 postParaSpacing\
 :0  >
<style "Cell" parent "Normal" postParaSpacing:0  >
<style "Closing" parent "Paragraph" nextStyle "Signature" preParaSpacing:110 po\
 stParaSpacing:1000  >
<style "Code" parent "Normal" nextStyle "Code" face:"Courier" size:8  >
<style "Date" parent "Normal" nextStyle "Recipient" postParaSpacing:500  >
<style "Enclosures" parent "Paragraph" glossary "Enclosures" nextStyle "CC" >
<style "Fixme" parent "Normal" nextStyle "Fixme" color:"Red"  shading:0:"Black"\
 :"Grey 75":"" dropShadow:0  noFrame  >
<style "Footnote" parent "Normal" >
<style "HdrFtr" parent "Normal" localTabs cT:3500 rT:7000  >
<style "Heading" parent "Normal" nextStyle "Normal" keepWith leftIndent:500 pre\
 ParaSpacing:300 postParaSpacing:100  bold size:16  >
<style "Heading Margin Note" parent "Heading" nextStyle "Heading Margin Note" f\
 irstIndent:-500  face:"Helvetica" size:8  >
<style "SubHeading" parent "Normal" nextStyle "SubHeading" size:14  >
<style "html_hyperlink_text" parent "Normal" nextStyle "html_hyperlink_text" un\
 derline color:"HtmlLinkDefault@"  >
<style "NumList" parent "Paragraph" glossary "NumList" firstIndent:0 leftIndent\
 :325  localTabs dT:187:"."  >
<style "NumListPara" parent "NumList" firstIndent:325  localTabs lT:250  >
<style "NumListStart" parent "NumList" glossary "NumListStart" nextStyle "NumLi\
 st" >
<style "Paragraph" parent "Normal" postParaSpacing:140  >
<style "Recipient" parent "Normal" nextStyle "Address" >
<style "Salutation" parent "AddressLast" nextStyle "Paragraph" >
<style "Signature" parent "Paragraph" nextStyle "Enclosures" postParaSpacing:50\
 0  >
<series "main" 0 1 3 2 4 0 0 0 0 0 trailer:". ">
<series "Footnote$" 0 0 0 0 0 0 0 0 0 0>
<series "Endnote$" 0 0 0 0 0 0 0 0 0 0>
<series "numberStyle" 0 1 2 3 4 0 0 0 0 0 trailer:". ">
<series "NumList" 0 1 2 3 4 0 0 0 0 0 trailer:".">
<S_G "FootnoteBar@" live>
<T "_________________________">
<P "Normal">
<E_G>
<S_G "FootnoteContBar@" live>
<T "__________________________________________________">
<P "Normal">
<E_G>
<S_G "EndnoteBar@" live>
<T "_________________________">
<P "Normal">
<E_G>
<S_G "TableContinuation@" live>
<T "(cont.)">
<E_G>
<S_G "Enclosures" live>
<T "Enclosures:^aj" no-underline >
<E_G>
<S_G "CC" live>
<T "CC:^aj">
<E_G>
<S_G "Bullet" live>
<T "^lh" face:"Symbol" >
<T "^aj">
<E_G>
<S_G "NumList" live>
<T "^aj">
<S_F fieldType:3>
<T "series \"NumList\"">
<FV>
<T "2.">
<E_F>
<T "^aj">
<E_G>
<S_G "NumListStart" live>
<T "^aj">
<S_F fieldType:3>
<T "series \"NumList\" -set 1">
<FV>
<T "1. ">
<E_F>
<T "^aj">
<E_G>
<color "White":0:0:0:0>
<color "Black":0:0:0:255>
<color "Grey 95":0:0:0:13>
<color "Grey 87":0:0:0:33>
<color "Grey 75":0:0:0:64>
<color "Grey 50":0:0:0:128>
<color "Red":0:255:255:0>
<color "Red 95":13:255:255:0>
<color "Red 87":33:255:255:0>
<color "Red 75":64:255:255:0>
<color "Red 50":128:255:255:0>
<color "Green":255:0:255:0>
<color "Green 95":255:13:255:0>
<color "Green 87":255:33:255:0>
<color "Green 75":255:64:255:0>
<color "Green 50":255:128:255:0>
<color "Blue":255:255:0:0>
<color "Blue 95":255:255:13:0>
<color "Blue 87":255:255:33:0>
<color "Blue 75":255:255:64:0>
<color "Blue 50":255:255:128:0>
<color "Yellow":0:0:255:0>
<color "Yellow 95":0:0:255:13>
<color "Yellow 87":0:0:255:33>
<color "Yellow 75":0:0:255:64>
<color "Yellow 50":0:0:255:128>
<color "Magenta":0:255:0:0>
<color "Magenta 95":0:255:0:13>
<color "Magenta 87":0:255:0:33>
<color "Magenta 75":0:255:0:64>
<color "Magenta 50":0:255:0:128>
<color "Cyan":255:0:0:0>
<color "Cyan 95":255:0:0:13>
<color "Cyan 87":255:0:0:33>
<color "Cyan 75":255:0:0:64>
<color "Cyan 50":255:0:0:128>
<color "Tan":0:57:131:0>
<color "Clay":0:74:74:57>
<color "Brown":30:100:220:30>
<color "Dark Brown":60:135:190:65>
<color "Olive":90:65:190:65>
<color "Light Orange":0:33:255:0>
<color "Orange":0:90:255:0>
<color "Dark Orange":0:132:255:0>
<color "Light Purple":31:153:0:0>
<color "Purple":80:208:0:15>
<color "Dark Purple":25:126:0:44>
<color "HtmlLinkDefault@":255:255:0:0>
<end_styles>
<start_flow>
<WP400 "This file must be filtered to be read in WP 3.11">
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<T "DCOracle2" bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<T "User's Guide & Reference" bold size:36 >
<P "Normal" justifyRight  bold size:36 >
<P "Normal" justifyRight  bold size:18 >
<T "Release 1.1" bold size:18 >
<P "Normal" justifyRight  bold size:18 >
<S_F fieldType:1
<start_eval_value>
<T "April 17, 2002">
<end_eval_value>
>
<T "date 4 -format \"Mmmm d, yyyy\" -saveEval">
<FV>
<T "April 17, 2002" bold size:18 >
<E_F>
<P "Normal" justifyRight  bold size:18 >
<P "Normal" justifyRight  bold size:18 >
<T "Matthew T. Kromer">
<P "Normal" justifyRight >
<T "Copyright ^kj 2000, 2001, 2002 Zope Corporation">
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<P "Normal" justifyRight >
<T "Zope Corporation" bold size:18 >
<P "Normal" justifyRight >
<T "Lafayette Technology Center">
<P "Normal" justifyRight >
<T "513 Prince Edward Street">
<P "Normal" justifyRight >
<T "Fredericksburg, VA 22408">
<P "Normal" justifyRight >
<T "(888) 344-4332 (sales)">
<P "Normal" justifyRight >
<T "http://www.zope.com">
<P "Normal" justifyRight >
<T "LICENSE">
<P "Heading">
<T "Redistribution and use in source and binary forms, with or without modifica\
 tion, are permitted provided that the following conditions are  met:" size:12 \
 >
<P "Normal" size:12 >
<P "Normal" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajRedistributions of source code must retain the above copyright notice, t\
 his list of conditions, and the following disclaimer." size:12 >
<P "BulletPara" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajRedistributions in binary form must reproduce the above copyright notice\
 , this list of conditions, and the following disclaimer in the documentation a\
 nd/or other materials provided with the distribution." size:12 >
<P "BulletPara" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajNames associated with Zope or Zope Corporation must not be used to endor\
 se or promote products derived from this software without specific prior writt\
 en permission from Zope Corporation." size:12 >
<P "BulletPara" size:12 >
<T "^lh" face:"Symbol" size:12 >
<T "^ajModified redistributions in any form whatsoever must retain the followin\
 g acknowledgment:" size:12 >
<P "BulletPara" firstIndent:0 leftIndent:250  size:12 >
<T "^aj\"This product includes software developed by Zope Corporation for use i\
 n the Z Object Publishing Environment (http://www.zope.com/).\"" size:12 >
<P "BulletPara" size:12 >
<T "^ajIntact (re-)distributions of any official Zope release do not require an\
  external acknowledgment." size:12 >
<P "BulletPara" size:12 >
<P "Normal" size:12 >
<T "THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION AND CONTRIBUTORS " size:12 >
<T "AS IS" bold size:12 >
<T " AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\
  DISCLAIMED.  IN NO EVENT SHALL ZOPE CORPORATION OR CONTRIBUTORS BE LIABLE FOR\
  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGE\
 S  INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND O\
 N ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INC\
 LUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFT\
 WARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." size:12 >
<P "Normal" justifyFull  size:12 >
<P "Normal" justifyFull  size:10 >
<P "Normal" justifyFull  size:10 >
<section  odd_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin:\
 1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gut\
 terWidth:500 oddHeader:Normal "_AX_HF_1" firstHeader:Normal "_AX_HF_2" oddFoot\
 er:Normal "_AX_HF_3" firstFooter:Normal "_AX_HF_4" sectNumFmt:-1 sectPageSep:"\
 -" pageNumFmt:0 pageNumCtl:0>
<T "DCOracle2 User's Guide & Reference">
<P "Heading">
<T "This document describes the various objects and interfaces to the DCOracle2\
  binding of Oracle 8 OCI calls for Python.  DCOracle2 is a Python wrapper arou\
 nd a C binding called ``dco2'' which provides Python DB API 2.0 functionality.\
 ">
<P "Normal">
<T "DB API">
<P "Heading">
<T "At the time of this writing, the Python DB 2.0 API was available on the web\
  at ">
<S_F fieldType:16
<start_eval_value>
<T "http://www.python.org/topics/database/DatabaseAPI-2.0.html">
<end_eval_value>
>
<T "macro \"WP_HYPERLINK@\" -pass \"http://www.python.org/topics/database/Datab\
 aseAPI-2.0.html\" -pass \"\" -text \"http://www.python.org/topics/database/Dat\
 abaseAPI-2.0.html\" -textStyle \"html_hyperlink_text\"">
<FV>
<T "http://www.python.org/topics/database/DatabaseAPI-2.0.html" underline color\
 :"HtmlLinkDefault@" >
<E_F>
<T ".  The DB API forms the official interface of DCOracle2, although DCOracle2\
  has a number of extensions and alternatives.">
<P "Normal">
<T "Programming with DCOracle2">
<P "Heading">
<T "Writing DCOracle2 programs is fairly straightforward. Familiarity with the \
 DB API specification is useful, but should not be required to use DCOracle2.">
<P "Normal">
<P "Normal">
<T "All DCOracle2 programs must import the DCOracle2 module (or have it made av\
 ailable to them.)  The environment variable ORACLE_HOME should be set before i\
 mporting DCOracle2, and the Oracle run time libraries should be within the run\
 time library search path (LD_LIBRARY_PATH on many systems.)">
<P "Normal">
<P "Normal">
<T "A program establishes one or more connections to Oracle.  Each connection s\
 upports cursors, which allow statements to be executed.  The results of an exe\
 cuted statement are retrievable with a fetch operation.  For example:">
<P "Normal">
<P "Normal">
<T "import DCOracle2^aj^aj^aj^aj^aj# Import runtime">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "db = DCOracle2.connect('scott/tiger')^aj^aj^aj# Connect to database">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "c = db.cursor()^aj^aj^aj^aj^aj# Allocate a cursor">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "c.execute(`select * from emp where empno=7902')^aj# Execute a statement">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "print c.fetchall()^aj^aj^aj^aj^aj# Print all results">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Normal">
<T "Stored procedure objects are available through a special ``procedure'' name\
  on cursors.  Stored procedure objects simplify access to stored procedures.  \
 The docstring on a stored procedure object will describe its parameters in eng\
 lish, for convenience.  Continuing with the previous example:">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "find = c.procedure.scott.emp_actions.find^aj^aj# Reference the stored proce\
 dure">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "print find.__doc__^aj^aj^aj^aj^aj# Print its docstring">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "print find(7902)^aj^aj^aj^aj^aj# Invoke and print results">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Normal">
<T "In the test directory of the source distribution, the ``procdef.sql'' file \
 contains several sample stored procedures in the package ``emp_actions.''">
<P "Normal">
<T "Usage">
<P "Heading">
<T "import DCOracle2">
<P "Code">
<P "Code">
<T "connection" italic >
<T " ">
<T "=" no-italic >
<T " DCOracle2.connect(">
<T "connectionstring" italic >
<T ")" no-italic >
<P "Code">
<T "traceback " italic >
<T "=" no-italic >
<T " " italic >
<T "DCOracle2.traceback([">
<T "format={" no-italic >
<T "0" bold no-italic >
<T "|1}" no-italic >
<T "])">
<P "Code">
<T "type " italic >
<T "=" no-italic >
<T " " italic >
<T "DCOracle2.TypeTable(" no-italic >
<T "type" italic >
<T ")" no-italic >
<P "Code">
<T "type " italic >
<T "= DCOracle2.Type(" no-italic >
<T "type" italic >
<T ")" no-italic >
<P "Code">
<T "version " italic >
<T "=">
<T " " italic >
<T "DCO" no-italic >
<T "racle2.version">
<P "Code">
<T "apilevel " italic >
<T "=">
<T " " italic >
<T "DCO" no-italic >
<T "racle2.apilevel">
<P "Code">
<T "threadsafety " italic >
<T "=">
<T " " italic >
<T "DCO" no-italic >
<T "racle2.threadsafety">
<P "Code">
<T "paramstyle " italic >
<T "=" no-italic >
<T " DCOracle2.paramstyle">
<P "Code">
<P "Code">
<T "connection" italic >
<T ".close()">
<P "Code">
<T "connection." italic >
<T "prepare([" no-italic >
<T "statement" italic >
<T "])" no-italic >
<P "Code">
<T "connection" italic >
<T ".commit([twophase={">
<T "0" bold >
<T "|1}]" no-bold >
<T ")">
<P "Code">
<T "connection." italic >
<T "rollback()">
<P "Code">
<T "listoftuples " italic >
<T "= " no-italic >
<T "connection" italic >
<T ".objects([all={" no-italic >
<T "0" bold no-italic >
<T "|1}])" no-italic >
<P "Code">
<T "text" italic >
<T " = " no-italic >
<T "connection." italic >
<T "getSource(" no-italic >
<T "procname" italic >
<T ")" no-italic >
<P "Code">
<T "description " italic >
<T "= " no-italic >
<T "connection" italic >
<T ".describe(" no-italic >
<T "name" italic >
<T ")" no-italic >
<P "Code">
<T "bao" italic >
<T " = " no-italic >
<T "connection" italic >
<T ".BindingArray(" no-italic >
<T "count" italic >
<T ", " no-italic >
<T "size" italic >
<T ", " no-italic >
<T "type" italic >
<T ")" no-italic >
<P "Code">
<T "versiondict" italic >
<T " = " no-italic >
<T "connection." italic >
<T "version" no-italic >
<P "Code">
<P "Code">
<T "cursor " italic >
<T "=">
<T " connection." italic >
<T "cursor()">
<P "Code">
<T "cursor." italic >
<T "arraysize ">
<T "=" no-italic >
<T " ">
<T "n" italic >
<P "Code">
<T "description " italic >
<T "=" no-italic >
<T " cursor." italic >
<T "description" no-italic >
<P "Code">
<T "description " italic >
<T "=" no-italic >
<T " ">
<T "cursor." italic >
<T "describe()">
<P "Code">
<T "count" italic >
<T " ">
<T "=" no-italic >
<T " ">
<T "cursor." italic >
<T "rowcount">
<P "Code">
<T "cursor." italic >
<T "close()">
<P "Code">
<T "cursor." italic >
<T "setPrefetch(" no-italic >
<T "records " italic >
<T "[" no-italic >
<T ", size" italic >
<T "])" no-italic >
<P "Code">
<T "cursor." italic >
<T "execute(">
<T "statement, " italic >
<T "[">
<T "param1" italic >
<T "[, ">
<T "param2" italic >
<T "[, ...">
<T "paramn" italic >
<T "]]]. [param=value, ...])">
<P "Code">
<T "cursor." italic >
<T "executemany(">
<T "statment, paramsequence" italic >
<T ")">
<P "Code">
<T "list " italic >
<T "=" no-italic >
<T " cursor." italic >
<T "fetchone([skip=0])">
<P "Code">
<T "listoflists" italic >
<T " ">
<T "=" no-italic >
<T " ">
<T "cursor" italic >
<T ".fetchmany([size=">
<T "size" italic >
<T "][,skip=0])">
<P "Code">
<T "listoflists" italic >
<T " = ">
<T "cursor." italic >
<T "fetchall([skip=0])">
<P "Code">
<T "listofparameters" italic >
<T " = " no-italic >
<T "cursor" italic >
<T ".callproc(" no-italic >
<T "name, parameters)" italic >
<P "Code">
<T "value" italic >
<T " = ">
<T "cursor." italic >
<T "procedure">
<T ".schema.package.name" italic >
<T "(">
<T "param1, ... paramn" italic >
<T ")">
<P "Code">
<P "Code">
<T "length" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".length()" no-italic >
<P "Code">
<T "data" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".read([" no-italic >
<T "bytes" italic >
<T ", [" no-italic >
<T "offset" italic >
<T ", [" no-italic >
<T "csid" italic >
<T ", [" no-italic >
<T "csfrm" italic >
<T "]]]])" no-italic >
<P "Code">
<T "count" italic >
<T " = " no-italic >
<T "LobLocator" italic >
<T ".write(" no-italic >
<T "string" italic >
<T ", [" no-italic >
<T "offset" italic >
<T ", [" no-italic >
<T "csid" italic >
<T ", [" no-italic >
<T "csfrm" italic >
<T "]]])" no-italic >
<P "Code" justifyLeft >
<T "LobLocator" italic >
<T ".trim(" no-italic >
<T "length" italic >
<T ")" no-italic >
<P "Code">
<P "Code">
<P "Code">
<T "Type Constructors:" bold face:"Helvetica" >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.Date(">
<T "year, month, day" italic >
<T ")" no-italic >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.Time(" no-italic >
<T "hour, minute, second" italic >
<T ")" no-italic >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.Timestamp(" no-italic >
<T "year, month, day, hour, minute, second" italic >
<T ")" no-italic >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.DateFromTicks(" no-italic >
<T "ticks" italic >
<T ")" no-italic >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.TimeFromTicks(" no-italic >
<T "ticks" italic >
<T ")" no-italic >
<P "Code">
<T "OracleDate" italic >
<T " = DCOracle2.TimestampFromTicks" no-italic >
<T "(ticks" italic >
<T ")" no-italic >
<P "Code">
<T "wrapper " italic >
<T "= DCOracle2.Binary(" no-italic >
<T "string" italic >
<T ")" no-italic >
<P "Code">
<T "wrapper" italic >
<T " = DCOracle2.TypeCoercion(" no-italic >
<T "value" italic >
<T ", " no-italic >
<T "type)" italic >
<P "Code">
<P "Code">
<T "Type Comparison Objects:" bold face:"Helvetica" >
<P "Code" bold >
<T "DCOracle2.STRING">
<P "Code">
<T "DCOracle2.BINARY">
<P "Code">
<T "DCOracle2.NUMBER">
<P "Code">
<T "DCOracle2.DATETIME">
<P "Code">
<T "DCOracle2.ROWID">
<P "Code">
<P "Code">
<T "Error Objects:" bold face:"Helvetica" >
<P "Code" bold face:"Helvetica" >
<T "DCOracle2.Error">
<P "Code">
<T "DCOracle2.Warning">
<P "Code">
<T "DCOracle2.InterfaceError">
<P "Code">
<T "DCOracle2.DatabaseError">
<P "Code">
<T "DCOracle2.InternalError">
<P "Code">
<T "DCOracle2.OperationalError">
<P "Code">
<T "DCOracle2.ProgrammingError">
<P "Code">
<T "DCOracle2.IntegrityError">
<P "Code">
<T "DCOracle2.DataError">
<P "Code">
<T "DCOracle2.NotSupportedError">
<P "Code">
<page_break>
<T "DCOracle2.connect(">
<T "connectionstring)" italic >
<P "Heading">
<T "The connect method connects to the database with the provided credentials. \
  The format of a connection string is ">
<T "userid/password@service" face:"Courier" size:10 >
<T ", where the ">
<T "@service" face:"Courier" size:10 >
<T " component may be omitted.  If ">
<T "service" italic >
<T " is not specified, the current default database will be used.  If ">
<T "connectionstring" italic >
<T " is null, the connection will be made using external credentials (">
<T "OCI_CRED_EXT" face:"Courier" >
<T ").">
<P "Normal">
<T "DCOracle2.traceback([">
<T "format=1" italic >
<T "]) ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "DCOracle can retrieve a traceback of  the C layer events for debugging purp\
 oses.  It is useful to save the output of the formatted traceback for problem \
 reporting.">
<P "Normal">
<T "DCOracle2.TypeTable(">
<T "type" italic >
<T ") ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "The TypeTable method will convert numeric types to SQLT_ strings and back. \
  For example, TypeTable(1) will return ``SQLT_CHR'' and TypeTable(``SQLT_CHR''\
 ) will return 1.  The type table is a lookup table constructed from Oracle con\
 stants at compile time.">
<P "Normal">
<T "DCOracle2.Type(">
<T "type" italic >
<T ") ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "The Type method will convert a numeric or string type into the external typ\
 e representation, e.g. Type(1) and Type(``SQLT_CHR'') will both return ``VARCH\
 AR2.''  The type translation table is a dictionary inside the DCOracle2 module\
 , and not managed by Oracle.">
<P "Normal">
<T "DCOracle2.apilevel">
<P "Heading">
<T "This is the DB API level of DCOracle2, the constant \"2.0\".">
<P "Normal">
<T "DCOracle2.threadsafety">
<P "Heading">
<T "This is the thread-safety-ness level of DCOracle2, the constant 3.  This me\
 ans that threads may share the module, connections, and cursors.  Note that pr\
 ogramming errors are still possible without a mutex to serialize resources bet\
 ween threads.">
<P "Normal">
<P "Normal">
<T "DCOracle2.paramstyle">
<P "Heading">
<T "The value ``numeric.''  Numeric positional parameters are the norm, but nam\
 ed keyword parameters are accepted by the execute() method.  This means that b\
 indings to SQL statements are normally specified as ``:1'' ``:2'' ``:3'' etc. \
 e.g. ``SELECT * FROM EMP WHERE EMPNO=:1.''">
<P "Normal">
<T "connection" italic >
<T ".close()">
<P "Heading">
<T "This closes the connection to Oracle.  Any attempt to use a connection or c\
 ursor object to access the database after the connection has been closed will \
 raise an ">
<T "InterfaceError" face:"Courier" >
<T ".  ">
<T "Note" italic >
<T ":  Close the connection after all cursors have been closed; closing the cur\
 sor after the connection may result in a \"stuck\" cursor.">
<P "Normal">
<T "connection." italic >
<T "prepare([">
<T "statement" italic >
<T "]) ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "With no statement, this prepares for a commit operation (for a two-phase co\
 mmit).  Under normal circumstances, applications use one-phase commit.">
<P "Normal">
<P "Normal">
<T "When a statement is provided, this creates a new cursor, with the statement\
  bound to the cursor, and returns the cursor object.">
<P "Normal">
<T "connection" italic >
<T ".commit([twophase={">
<T "0" underline >
<T "|1}]" no-bold >
<T ")">
<P "Heading">
<T "This commits all changes to the database on the connection.  If the paramet\
 er ">
<T "twophase" face:"Courier" >
<T " is specified as 1, a two-phase commit is performed.  The default is to do \
 a one-phase commit.">
<P "Normal">
<P "Normal">
<T "Two-phase commit is not very meaningful without spreading a transaction bet\
 ween multiple databases, and transaction-ID support is not provided by DCOracl\
 e2.">
<P "Fixme">
<T "connection" italic >
<T ".rollback()">
<P "Heading">
<T "This calls the dco2 ">
<T "ServerContext" italic >
<T ".rollback() method on the database connection.">
<P "Normal">
<T "connection" italic >
<T ".describe(">
<T "name" italic >
<T ") ">
<T "[" color:"Grey 50" size:8 >
<T "NONAPI" no-bold color:"Grey 50" size:8 >
<T "]" color:"Grey 50" size:8 >
<P "Heading">
<T "This calls the OCI function OCIDescribeAny upon the named schema object; th\
 e object can be of any type.  The result is a dictionary which often contains \
 lists of dictionaries based on the key found.  The method ">
<T "connection." italic >
<T "collapsedesc(">
<T "desc" italic >
<T ") will collapse this dictionary somewhat into a more usable form.">
<P "Normal">
<T "connection" italic >
<T ".BindingArray(">
<T "count" italic >
<T ", ">
<T "size" italic >
<T ", ">
<T "type" italic >
<T ") ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "BindingArrays are used to form array or OUT parameters for PL/SQL.  Constru\
 cts a dco2 BindingArrayObject with ">
<T "count" italic >
<T " elements, each of size ">
<T "size" italic >
<T " and type ">
<T "type.  " italic >
<T "The type may be numeric or symbolic e.g. 'SQLT_CHR'.  This container class \
 is capable of having its contents changed during the execution of a SQL statem\
 ent, and forms the basis for stored procedure argument passing.">
<P "Normal">
<P "Normal">
<T "The following example shows the longhand format of invoking a stored proced\
 ure using a BindingArray.  In this example, the ">
<T "find" face:"Courier" size:12 >
<T " function accepts an employee ID and returns the employee name.">
<P "Normal">
<P "Normal">
<T "^ajimport DCOracle2">
<P "Code">
<P "Code">
<T "^ajdb = DCOracle2.connect(\"scott/tiger\")">
<P "Code">
<T "^ajc = db.cursor()">
<P "Code">
<T "^ajbao = db.BindingArray(1, 64, 'SQLT_STR')">
<P "Code">
<P "Code">
<P "Code">
<T "^ajc.execute(\"begin :1 := emp_actions.find(7902); end;\", bao)">
<P "Code">
<P "Code">
<T "^ajprint bao[0]">
<P "Code">
<P "Normal">
<T "BindingArrays allow assignment into the array, or one past the end of the a\
 rray.  BindingArrays will grow as necessary to contain all values.  Example:">
<P "Normal">
<P "Normal">
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:500 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:500 >
<T "bao = db.BindingArray(1, 64, 'SQLT_STR')">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "bao[1] = \"eek!\"   # fails">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "bao[0] = \"this works\"">
<P "Code" firstIndent:500 leftIndent:500 >
<T "bao[1] = \"NOW this works\"">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code">
<T "In general, BindingArrays are not used directly; they are constructed autom\
 atically as part of the stored procedure invocation process and by ">
<T "cursor" italic >
<T ".executemany()." no-italic >
<P "Normal">
<P "Normal">
<T "BindingArrays of size 1 form nonarray IN/OUT bindings to PL/SQL.  BindingAr\
 rays of size > 1 form array IN/OUT bindings.  Most stored procedures do not ac\
 cept array input.">
<P "Normal">
<T "BindingArrays of size > 1 are also used for multiple-row execution. ">
<P "Normal">
<P "Normal">
<T "The default mode of invocation for a BindingArray is a dynamic bind; in som\
 e cases, this will not be appropriate, and the BindingArrays should be declare\
 d as static binds.  The method setStatic(1) on the BindingArray will change it\
  to be a static bind. ">
<P "Normal">
<T "connection" italic >
<T ".version">
<P "Heading">
<T "This returns a version dictionary of the relevant Oracle version strings.  \
 It is useful for diagnosing problems.  Example:">
<P "Normal">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:500 >
<T "{'CORE ': '8.1.3.0.0 (Production)',">
<P "Code" firstIndent:500 leftIndent:500 >
<T " 'DCOracle2': '1.84 (dco2: 1.106 -DORACLE8i -DUSEOBJECT -Dlinux -D_REENTRAN\
 T )',">
<P "Code" firstIndent:500 leftIndent:500 >
<T " 'NLSRTL ': '3.4.0.0.0 (Production)',">
<P "Code" firstIndent:500 leftIndent:500 >
<T " 'Oracle8i Enterprise Edition ': '8.1.5.0.2 (Production)',">
<P "Code" firstIndent:500 leftIndent:500 >
<T " 'PL/SQL ': '8.1.5.0.0 (Production)',">
<P "Code" firstIndent:500 leftIndent:500 >
<T " 'TNS for Linux: ': '8.1.5.0.0 (Production)'}">
<P "Code" firstIndent:500 leftIndent:500 >
<T "connection" italic >
<T ".cursor()">
<P "Heading">
<T "This returns a cursor object suitable for executing SQL statements and retr\
 ieving results.">
<P "Normal">
<T "The ">
<T "connection" italic >
<T " internal cursor">
<P "Heading">
<T "Each ">
<T "connection" italic >
<T " object contains an internal cursor, and thus all ">
<T "cursor" italic >
<T " methods also apply to ">
<T "connection" italic >
<T " objects.  It is advisable, however, to explicitly allocate a cursor for us\
 e rather than using the internal cursor.">
<P "Normal">
<T "cursor." italic >
<T "arraysize">
<P "Heading">
<T "This attribute controls the array size used to transfer SELECT results from\
  Oracle.  The default value is 20.">
<P "Normal">
<T "cursor." italic >
<T "rowcount">
<P "Heading">
<T "The row count affected by the last execute() operation.  For SELECT stateme\
 nts, the rowcount is the number of rows retrieved so far, not the total availa\
 ble rows.">
<P "Normal">
<T "cursor" italic >
<T ".description">
<P "Heading">
<T "This is a list of tuples of (">
<T "name, type, display_size, internal_size, precision, scale, nullok" face:"Co\
 urier" >
<T ") which has had the type field turned into text instead of the number.  Thi\
 s value is not assignable, but is set after each ">
<T "cursor" italic >
<T ".execute() function.  The description is ">
<T "None" face:"Courier" >
<T " if the last statement executed did not return any results.">
<P "Normal">
<P "Normal">
<T "The type field is checked against the API neutral types by comparing it to \
 the standard API type classes STRING, BINARY, NUMBER, DATETIME, and ROWID.  Th\
 e comparison will be equal if it is of that type.  For an example, see the Typ\
 e Comparison Objects section.">
<P "Normal">
<T "cursor" italic >
<T ".describe() ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "This returns a list of tuples of ">
<T "(name, type, display_size, internal_size, precision, scale, nullok)" face:"\
 Courier" >
<T "which is represents the result columns of the last ">
<T "cursor" italic >
<T ".execute.  The " no-italic >
<T "type" no-italic face:"Courier" >
<T " field returned is a numeric representation of the type." no-italic >
<P "Normal">
<T "cursor" italic >
<T ".close()">
<P "Heading">
<T "This closes the cursor.  Using a closed cursor (or a stored procedure objec\
 t bound to that cursor) to attempt to access the database will raise an ">
<T "InterfaceError" face:"Courier" >
<T ".  Cursors are implicitly closed when they are deleted by Python as their r\
 eference count goes to zero.  Cursors should be closed before the underlying d\
 atabase object is closed.">
<P "Normal">
<T "cursor" italic >
<T ".execute(">
<T "statement, " italic >
<T "[">
<T "parm1" italic >
<T "[, ">
<T "parm2" italic underline >
<T "[, ... " underline >
<T "parmn" italic underline >
<T "]]], [" underline >
<T "parm" italic underline >
<T "=">
<T "value, ..." italic >
<T "]">
<T ")" underline >
<P "Heading">
<T "This executes an SQL ">
<T "statement" italic >
<T " with optional parameters being bound as input arguments by position.  The \
 statement is cached, and if the same statement is used successively the origin\
 al statement handle is re-used.  If the statement is ">
<T "None" face:"Courier" >
<T ", the last statement to be executed will be used.">
<P "Normal">
<P "Normal">
<T "The Python DB 2.0 API specifies that execute takes only one parameter, ">
<T "sequence_of_values" face:"Courier" >
<T ".  DCOracle2 accepts this calling convention, but also allows multiple argu\
 ments to appear in the call (the outer list around the sequence of parameters \
 is optional).  DCOracle2 also allows named binding for execute parameters.  Th\
 e executemany method does not allow named parameters.">
<P "Normal">
<P "Normal">
<T "Examples:">
<P "Normal">
<P "Normal" level:1 >
<T "cursor.execute(\"SELECT * FROM EMP WHERE EMPNO = :1\", empno)             #\
  Numeric form">
<P "Code" level:1 >
<P "Code" level:1 >
<T "cursor.execute(\"SELECT * FROM EMP WHERE EMPNO = :1\", (empno,))          #\
  DBAPI form">
<P "Code" level:1 >
<P "Code" level:1 >
<T "cursor.execute(\"SELECT * FROM EMP WHERE EMPNO = :empno', empno=empno)   # \
 Named param">
<P "Code" level:1 >
<P "Code" level:1 >
<T "The underlying C module only has input binding translators for a restricted\
  set of types, being OracleDates, Strings, Integers, Longs, and Floats.  Any o\
 ther type of object passed in as a parameter will generate an error.  See the \
 section ``Type Conversion Rules'' for more information on input type conversio\
 ns. ">
<P "Normal">
<P "Normal">
<T "Coercion example, where column \"photo\" is a LONG RAW:">
<P "Normal">
<P "Normal">
<T "cursor.execute(\"INSERT INTO PHOTOTABLE (id, photo) VALUES (:1, :2)\", id, \
 \\">
<P "Code" level:1 >
<T "^ajBinary(photo))">
<P "Code" level:1 >
<P "Normal" level:1 >
<T "When binding values, named binds may also be used with keyword arguments.  \
 For example:">
<P "Normal" firstIndent:-500 leftIndent:-500 level:1 >
<P "Normal" firstIndent:-500 leftIndent:-500 level:1 >
<T "cursor.execute(\"INSERT INTO TEST (name, id) VALUES (:name, :id)\", name=\"\
 Matt Kromer\", id=\"1\")">
<P "Code" firstIndent:0 leftIndent:500 level:1 >
<P "Code" firstIndent:-500 leftIndent:-500 level:1 >
<T "The underlying C implementation will accept BindingArrays as bound paramete\
 rs; BindingArrays will cause iterative execution of non-select and non-PL/SQL \
 statements (i.e. this is how ">
<T "cursor" italic >
<T ".executemany works).  ">
<P "Normal" firstIndent:-500 leftIndent:-500 level:1 >
<T "cursor" italic >
<T ".executemany(">
<T "statement, paramsequence)" italic >
<P "Heading">
<T "This repeatedly executes an SQL ">
<T "statement" italic >
<T " with parameters being bound as input arguments by position.  The statement\
  handle is re-used for all inputs, and may also be shared with a successive ex\
 ecute or executemany.  The parameter ">
<T "paramsequence" italic >
<T " is a sequence of lists of input values.">
<P "Normal">
<P "Normal">
<T "Example:">
<P "Normal">
<P "Code" level:1 >
<T "cursor.executemany(\"INSERT INTO TEST (NAME, ID) VALUES (:1, :2)\", ((\"Mat\
 t\", 1),">
<P "Code" level:1 >
<T "^aj(\"Mike\", 2)))">
<P "Code" level:1 >
<P "Code">
<T "See the restriction in ">
<T "cursor" italic >
<T ".execute about the allowable object types to be bound.  Type overriding is \
 the same as for ">
<T "cursor." italic >
<T "execute.">
<P "Normal">
<P "Normal">
<T "Named parameters to executemany are not implemented.">
<P "Fixme">
<P "Normal">
<T "Using the executemany method can improve performance for INSERT operations.\
 ">
<P "Normal">
<P "Normal">
<T "Note: Calling executemany for a SELECT statement will not produce the desir\
 ed results; only the results of the last SELECT will be available for fetching\
 .">
<P "Normal">
<T "cursor." italic >
<T "setPrefetch">
<T "(rows " italic >
<T "[">
<T ", size" italic >
<T "]">
<T ") " italic >
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "The setPrefetch method sets Oracle prefetching for this cursor; Oracle will\
  instructed to prefetch up to ">
<T "rows" italic face:"Courier" >
<T " rows, and if a size is specified, that is the maximum storage area to be u\
 sed for prefetching.  The default is to prefetch the lesser of 20 rows or one \
 megabyte of storage.">
<P "Normal">
<T "cursor" italic >
<T ".fetchone([skip=0 ">
<T "[NONAPI] " no-bold color:"Grey 50" size:8 >
<T "])">
<P "Heading">
<T "This retrieves one row of a result from a prior execute function.  The valu\
 es of the row are returned as a list. Fetch operations will internally buffer \
 based on the value of the ">
<T "arraysize" face:"Courier" >
<T " attribute of the cursor.  If no data is available to be returned, the resu\
 lt will be ">
<T "None" face:"Courier" >
<T ".   If the ">
<T "skip" italic >
<T " argument is specified, that many results will be skipped before fetching a\
  row.  The skip argument is not a part of the DB 2.0 API." no-italic >
<P "Normal">
<T "cursor" italic >
<T ".fetchmany([size=">
<T "size" italic underline >
<T "][,skip=0 " underline >
<T "[NONAPI] " no-bold color:"Grey 50" size:8 >
<T "])" underline >
<P "Heading">
<T "This retrieves at most ">
<T "size" italic >
<T " rows from a prior execute function.  The values of the rows return is a li\
 st of lists (a list of rows each containing a list of values).  If the ">
<T "skip" italic >
<T " argument is specified, that many results will be skipped before fetching t\
 he rows.  The skip argument is not a part of the DB 2.0 API." no-italic >
<P "Normal">
<T "cursor" italic >
<T ".fetchall([skip=0 ">
<T "[NONAPI] " no-bold color:"Grey 50" size:8 >
<T "])">
<P "Heading">
<T "This retrieves all remaining rows from a prior execute function.  The value\
 s of the rows return is a list of lists (a list of rows each containing a list\
  of values).  If the ">
<T "skip" italic >
<T " argument is specified, that many results will be skipped before fetching t\
 he rows.  The skip argument is not a part of the DB 2.0 API." no-italic >
<P "Normal">
<T "cursor" italic >
<T ".callproc(">
<T "name, " italic >
<T "[">
<T "param1," italic >
<T " [">
<T "param2" italic >
<T ", ... ">
<T "param" italic >
<T "n]], [">
<T "name" italic >
<T "=">
<T "value" italic >
<T ", ...])">
<P "Heading">
<T "Calls the stored procedure ">
<T "name" italic >
<T " with the given parameters.  The complete list of parameters is returned as\
  a result list.  For example" no-italic >
<P "Normal">
<P "Normal">
<T "^ajimport DCOracle2">
<P "Code">
<T "^ajdb = DCOracle2.connect('scott/tiger')">
<P "Code">
<T "^ajc = db.cursor()">
<P "Code">
<T "^aj(empname, empid) = c.callproc(``emp_actions.findp'',7902)">
<P "Code">
<T "cursor." italic >
<T "procedure">
<T ".schema.package.name" italic >
<T "(">
<T "args..." italic >
<T ") ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "Invoke a stored procedure in the named schema and package.  The schema and \
 package names are optional; the default schema is used if the schema is omitte\
 d, and if a function or procedure is not in a package, the package name may be\
  omitted.  For example, user SCOTT may have a package named EMP_ACTIONS, which\
  may contain a set of functions such as FIND, FINDP, and FINDY.  The procedure\
  FINDP has as an IN parameter an integer (the employee ID) and an OUT paramete\
 r (the employee name).  The following example would invoke this procedure:">
<P "Normal">
<P "Code">
<T "^ajimport DCOracle2">
<P "Code">
<T "^ajdb = DCOracle2.connect('scott/tiger')">
<P "Code">
<T "^ajc = db.cursor()">
<P "Code">
<T "^ajempname = c.procedure.emp_actions.findp(7902)">
<P "Code">
<P "Normal">
<T "The result of a procedure or function is a single item if there is only one\
  OUT parameter, or a list of results if there are multiple OUT parameters (thi\
 s differs from the ">
<T "cursor." italic >
<T "callproc() method, which returns " no-italic >
<T "all" italic >
<T " parameters)" no-italic >
<T ".  Only IN parameters should be specified as arguments to the procedure/fun\
 ction; this includes IN OUT parameters.  Because DCOracle2 knows the variable \
 names used by the procedure, keyword arguments may also be passed, e.g. ">
<P "Normal">
<P "Normal">
<T "^ajempname = c.procedure.emp_actions.findp(empid=7902)">
<P "Code">
<P "Normal">
<P "Code">
<P "Code">
<T "Overloaded procedure names are not currently handled by DCOracle2.">
<P "Fixme">
<T "LOB Operations">
<P "Heading">
<T "Oracle can return Large OBjects (LOBs).  DCOracle2 supports character LOBs \
 and binary LOBs, CLOBs and BLOBs, respectively.  When a LOB object is returned\
 , it may be read and written to by its methods.">
<P "Normal">
<T "LobLocator" italic >
<T ".length() ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "Returns the length of the LOB referenced by ">
<T "LobLocator" italic >
<T ".">
<P "Normal">
<T "LobLocator" italic >
<T ".read([">
<T "size" italic >
<T ", [">
<T "offset" italic >
<T ", [">
<T "csid" italic >
<T ", [">
<T "csfrm" italic >
<T "]]]]) ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "Returns the data from the ">
<T "LobLocator" italic >
<T " for ">
<T "size" italic >
<T " bytes, which defaults to the end of the LOB.  Optionally, the starting LOB\
  ">
<T "offset" italic >
<T " may be provided, as may be the character set ID ">
<T "csid" italic >
<T " and character set form ">
<T "csfrm" italic >
<T ".  Both ">
<T "csid" italic >
<T " and ">
<T "csfrm" italic >
<T "  default and can be safely omitted unless the default character set Oracle\
  was installed with is not appropriate.">
<P "Normal">
<T "LobLocator" italic >
<T ".write(">
<T "string" italic >
<T ", [">
<T "offset" italic >
<T ", [">
<T "csid" italic >
<T ", [">
<T "csfrm" italic >
<T "]]]) ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading">
<T "Writes ">
<T "string" italic >
<T " to the selected LOB, optionally starting ">
<T "offset" italic >
<T " bytes into the LOB.  The character set parameters ">
<T "csid" italic >
<T " and ">
<T "csfrm" italic >
<T " default to the Oracle installation defaults and can be safely omitted.">
<P "Normal">
<P "Normal">
<T "Note: Empty LOBs can be inserted by using the EMPTY_BLOB() or EMPTY_CLOB() \
 Oracle functions.  LOB objects must be selected for updating before they can b\
 e written, for example:">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('insert into blobtest values (:1, :2, EMPTY_BLOB())', 'Shane Hath\
 away', 4)">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('select * from blobtest where id=4 for update')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "r = c.fetchone()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "lob = r[2]">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "lob.write(shanepic)">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db.commit()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "LobLocator" italic >
<T ".trim(">
<T "length" italic >
<T ")  ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "Heading" leftIndent:0 >
<T "Trims the LOB to the specified length, which must be less than or equal to \
 the current length.">
<P "Normal">
<T "Type Constructors">
<P "Heading">
<T "DCOracle2.Date(year, month, day)">
<P "SubHeading">
<T "DCOracle2.Time(hour, minute, second)">
<P "SubHeading">
<T "DCOracle2.Timestamp(year, month, day, hour, minute, second)">
<P "SubHeading">
<T "DCOracle2.DateFromTicks(ticks)">
<P "SubHeading">
<T "DCOracle2.TimeFromTicks(ticks)">
<P "SubHeading">
<T "DCOracle2.TimestampFromTicks(ticks)">
<P "SubHeading">
<P "Normal">
<T "Each of these constructors returns an ">
<T "OracleDate" face:"Courier" >
<T " object, which represents a date suitable for passing by parameter into an \
 execute() call.  The object is GMT based.">
<P "Normal">
<P "Normal">
<T "DCOracle2.Binary(string)">
<P "SubHeading">
<P "Normal">
<T "The Binary constructor currently returns its input, coerced as a ``SQLT_LBI\
 '' object (long binary).  DCOracle2 deals with most Oracle types as strings, n\
 ot Binary objects.">
<P "Normal">
<P "Normal">
<T "DCOracle2.TypeCoercion(">
<T "value" italic >
<T ", " no-italic >
<T "type" italic >
<T ")" no-italic >
<T " ">
<T "[NONAPI]" no-bold color:"Grey 50" size:8 >
<P "SubHeading">
<P "Normal">
<T "The TypeCoercion constructor will return a coerced value, which will be rep\
 resented to Oracle as the specified type.  The type may be numeric or named, e\
 .g. 5 or ``SQLT_STR''.  Type coercion is normally not required unless the defa\
 ult type binding rules are insufficient, in which case the application must pr\
 epare the data and provide a type coercion to present it to Oracle.">
<P "Normal">
<T "Type Comparison Objects">
<P "Heading">
<T "The type field of the cursor description is only meaningful within the cont\
 ext of a particular database; the DB API provides type comparison objects whic\
 h will compare equal  to the value of the type field if the that is the meta-t\
 ype represented.">
<P "Normal">
<P "Normal">
<T "DCOracle2.STRING" size:14 >
<P "Normal" size:14 >
<T "DCOracle2.BINARY" size:14 >
<P "Normal" size:14 >
<T "DCOracle2.NUMBER" size:14 >
<P "Normal" size:14 >
<T "DCOracle2.DATETIME" size:14 >
<P "Normal" size:14 >
<T "DCOracle2.ROWID" size:14 >
<P "Normal" size:14 >
<P "Normal">
<T "The STRING type means the object uses string representaton to Python, it do\
 es not (in the case of DCOracle2) imply that the string does not contain nonpr\
 intable characters, only that it creates a Python string object.">
<P "Normal">
<P "Normal">
<T "The BINARY type means the object is a ">
<T "LobLocator" face:"Courier" >
<T " , and has read(), write(),  length(), and trim() methods.  See the corresp\
 onding dco2 LobLocator documentation.">
<P "Normal">
<P "Normal">
<T "The NUMBER type means the object represents a number, either integer, long,\
  or floating point.">
<P "Normal">
<P "Normal">
<T "The DATETIME type means the object represents an OracleDate.  OracleDates r\
 eturn a string in the format \"yyyy-mm-dd hh:mm:ss\" when used in a string con\
 text, or an an integer (timestamp) when used in an integer context.">
<P "Normal">
<P "Normal">
<T "The ROWID type means the object represents a ROWID.">
<P "Normal">
<P "Normal">
<T "Example:">
<P "Normal">
<P "Normal">
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:500 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:500 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:500 >
<T "c.execute('select * from emp')">
<P "Code" firstIndent:500 leftIndent:500 >
<P "Code" firstIndent:500 leftIndent:500 >
<T "if c.description[0][1] == DCOracle2.NUMBER:">
<P "Code" firstIndent:500 leftIndent:500 >
<T "^ajprint \"The first column is a number\"">
<P "Code" firstIndent:500 leftIndent:500 >
<T "else:">
<P "Code" firstIndent:500 leftIndent:500 >
<T "^ajprint \"The first column is not a number\"">
<P "Code" firstIndent:500 leftIndent:500 >
<T "Example Program">
<P "Heading">
<S_F fieldType:6 date:985703637 docType:42 appType:1>
*LINK ../test/test3.py
<T "link \"../test/test3.py\" -docType \"42\" -appType \"Words_\" -cvt \"FILTER\
 _ASCII_LINES_TO_WP@\" -app \"wp_start_ascii_lines_inset@\" -picture">
<FV>
<picture "/mirror1/home/matt/wrk/DCO2/test/test3.py" appId:1 proportional clipM\
 ode:1 width:6474 height:8052 picOrigXoffset:750 picOrigYoffset:1000 picOrigWid\
 th:6474 picOrigHeight:8052>
<E_F>
<P "Normal" keepWith >
<section  odd_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin:\
 1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gut\
 terWidth:500 oddHeader:Normal "_AX_HF_7" oddFooter:Normal "_AX_HF_10" evenFoot\
 er:Normal "_AX_HF_9" sectNumFmt:-1 sectPageSep:"-" pageNumFmt:0 pageNumCtl:0>
<T "BUILDING and INSTALLATION" size:18 >
<P "Heading" justifyCenter firstIndent:500 leftIndent:1000  size:18 >
<T "Generally, building the DCO2 module is as simple as setting up the Oracle b\
 uild environment and typing ">
<T "make" face:"Courier" >
<T ".  Here's an example:">
<P "Normal">
<P "Normal">
<T "bane(1)$ ">
<T ". oraenv" bold >
<P "Code">
<T "ORACLE_SID = [ORAC] ? ">
<T "<enter>" bold italic >
<P "Code">
<T "bane(2)$ ">
<T "make " bold >
<P "Code">
<T "(lots of output)" no-bold >
<P "Code" no-bold >
<P "Code">
<T "That's it!  The makefile will try to detect as much as it can and will prop\
 erly copy the built dco2.so module to the DCOracle2 directory.">
<P "Normal">
<P "Normal">
<T "A number of problems can happen during building:">
<P "Normal">
<P "Normal">
<T "Oracle environment not set up correctly" bold >
<P "Normal" underline >
<T "If  the environment variable">
<T " ORACLE_HOME" face:"Courier" >
<T " is not set, then the compilation will fail to find the proper Oracle inclu\
 de and library files.">
<P "Normal">
<P "Normal">
<T "Oracle development files not installed" bold >
<P "Normal" bold >
<T "Oracle installs the C headers to build OCI programs in ">
<T "$ORACLE_HOME/rdbms/demo" face:"Courier" >
<T ", ">
<T "$ORACLE_HOME/network/public" face:"Courier" >
<T ", and ">
<T "$ORACLE_HOME/plsql/public" face:"Courier" >
<T ".  If these directories do not have the proper include files, the build wil\
 l not succeed.  Oracle typically only installs these files when a complete ser\
 ver installation is performed.">
<P "Normal">
<P "Normal">
<T "Python development Makefile not available" bold >
<P "Normal" bold >
<T "If the make fails stating that ">
<T "/usr/lib/python1.5/config/Makefile" face:"Courier" >
<T " (or similar) cannot be built, it is symptomatic of the problem that the Py\
 thon development is not installed.  On a RedHat Linux system this would be the\
  ">
<T "python-devel " italic >
<T "package.">
<P "Normal">
<P "Normal">
<T "Python is not linked against libpthread (Linux)" bold >
<P "Normal" bold >
<T "Oracle on Linux is linked against libpthread.  Some recent linux distributi\
 ons may include versions of Python that are not linked against libpthread.  Wh\
 en dco2 is loaded, it will load the Oracle shared libraries which are incompat\
 ible with the libpth libraries of the existing Python binary.  This will cause\
  random lockups to occur to the process.  The only solution is to acquire a Py\
 thon that is not linked against libpth, but is instead linked against libpthre\
 ad.  This may be accomplished by either obtaining a different Python binary pa\
 ckage, or rebuilding Python from source. ">
<P "Normal">
<page_break>
<T "DIAGNOSIS">
<P "Heading" justifyCenter >
<T "Trace Table Debugging">
<P "Heading">
<T "DCOracle2 keeps an internal trace table, controlled by four environment var\
 iables:">
<P "Normal">
<P "Normal">
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACELOG^aj^aj(trace file name)">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEDUMP^aj^aj(dump file name)">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACESIZE^aj^aj(trace table size)">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEFLAGS^aj^aj(trace filter)">
<P "Normal" leftIndent:250 >
<P "Normal" leftIndent:250 >
<T "The variable DCO2TRACELOG, if set, names a file to record all trace events \
 (as they occur).  The variable DCO2TRACEDUMP names a file to dump the trace ta\
 ble to if an Oracle error occurs (but this is not the only reason DCOracle2 wi\
 ll raise an error). ">
<P "Normal">
<P "Normal">
<T "DCOracle2 will sometimes trap errors within a try/except, but this will sti\
 ll cause a trace dump to take place if DCO2TRACEDUMP is set.  Each new Oracle \
 error will append the trace file to the dump file.">
<P "Fixme">
<P "Normal">
<T "The variable DCO2TRACESIZE specifies the number of entries in the trace tab\
 le (the default is 512).  Each entry in the trace table is 10 words (40 bytes)\
  long, so the default trace table consumes 20K of storage.  Setting the size o\
 f the trace table to 0 will also set the DCO2TRACEFLAGS to 0.  DCO2TRACEFLAGS \
 is the binary OR (sum) of the following values:">
<P "Normal">
<P "Normal">
<RS>
<T "1">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Entry">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "2">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Exit">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "4">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Error">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "8">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Thread">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "16">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Program">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "32">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Oracle">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "64">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Info">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<RS>
<T "128">
<P "Cell">
<CE width:552 lm:100 rm:100 >
<T "Verbose">
<P "Cell">
<CE width:1014 lm:100 rm:100 last >
<P "Normal">
<T "The typical codes used are:">
<P "Normal">
<P "Normal">
<RS>
<T "17">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Function Entry">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "18">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Function Exit">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "33">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle call">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "34">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle return">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "36">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle error">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "65">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Info arguments">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "66">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Info result">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "161">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle handle call">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<RS>
<T "162">
<P "Cell">
<CE width:569 lm:100 rm:100 >
<T "Oracle handle return">
<P "Cell">
<CE width:1778 lm:100 rm:100 last >
<P "Normal">
<T "Up to 7 arguments are also recorded in the trace table, with the first argu\
 ment being a function name.">
<P "Normal">
<T "Problem Reporting">
<P "Heading">
<T "When submitting a problem report to Zope Corporation about DCOracle2, it is\
  useful to include a trace dump when incorrect results are being returned.  Wh\
 en reporting problems, please be sure and identify the following:">
<P "Normal">
<T "^lh" face:"Symbol" >
<T "^ajOperating System">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDistribution (for Linux)">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajPython Version">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajOracle Version">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajDCO2TRACEDUMP generated file (where appropriate)">
<P "Normal" leftIndent:250 >
<T "^lh" face:"Symbol" >
<T "^ajPython tracebacks (where appropriate)">
<P "Normal" leftIndent:250 >
<P "Normal" leftIndent:250 >
<T "The problem collector for DCOracle2 is currently located at ">
<S_F fieldType:16
<start_eval_value>
<T "http://www.zope.org/Members/matt/dco2/Tracker">
<end_eval_value>
>
<T "macro \"WP_HYPERLINK@\" -pass \"http://www.zope.org/Members/matt/dco2/Track\
 er\" -pass \"\" -text \"http://www.zope.org/Members/matt/dco2/Tracker\" -textS\
 tyle \"html_hyperlink_text\"">
<FV>
<T "htp://www.zope.org/Members/matt/dco2/Tracker" underline color:"HtmlLinkDefa\
 ult@" >
<E_F>
<T ".">
<P "Normal" firstIndent:0 leftIndent:0 >
<T "Paid Support">
<P "Heading">
<T "Paid support is an option for users of DCOracle2.  While DCOracle2 is a fre\
 e product, it still requires the commitment of resources on the part of Zope C\
 orporation to maintain it.  Free support is handled on an ad-hoc basis when ti\
 me permits; paid support contracts to Zope Corporation are handled on a priori\
 ty basis.">
<P "Normal">
<P "Normal">
<T "Zope Corporation is willing to work with its customers to establish support\
  programs which meet their needs.  Persons interested in purchasing a support \
 contract should contact sales@zope.com or visit ">
<S_F fieldType:16
<start_eval_value>
<T "http://www.zope.com/Services/SupportContracts">
<end_eval_value>
>
<T "macro \"WP_HYPERLINK@\" -pass \"http://www.zope.com/Services/SupportContrac\
 ts\" -pass \"\" -text \"http://www.zope.com/Services/SupportContracts\" -textS\
 tyle \"html_hyperlink_text\"">
<FV>
<T "http://www.zope.com/Services/SupportContracts" underline color:"HtmlLinkDef\
 ault@" >
<E_F>
<T ".">
<P "Normal">
<section  next_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin\
 :1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gu\
 tterWidth:500 evenHeader:Inherit evenFooter:Inherit sectNumFmt:-1 sectPageSep:\
 "-" pageNumFmt:0 pageNumCtl:0>
<T "Converting from DCOracle to DCOracle2">
<P "Heading">
<T "When converting from DCOracle, a few points are in order:">
<P "Normal">
<P "Normal">
<T "DCOracle uses the \"Connect\" method to connect to Oracle; DCOracle2 uses \\
 "connect\" but allows \"Connect\" for compatibility.">
<P "Normal">
<P "Normal">
<T "Binding to execute() is different.  DCOracle (and DB API 1.0) blurs the def\
 inition between execute and executemany() and will act as executemany() if it \
 is passed lists of lists; DCOracle execute()  takes list parameters in column \
 major order -- DCOracle2 executemany() takes list parameters in row major orde\
 r.  DCOracle performs positional parameter binds by using the names \":p1\" \"\
 :p2\" etc. rather than \":1\" \":2\" which is the format supported by DCOracle\
 2.  DCOracle takes list parameters as a ">
<T "single " italic >
<T "parameter, whereas DCOracle2 takes each value as a separate parameter.">
<P "Normal">
<P "Normal">
<T "Example: single row insert">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle.Connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('insert into test (name, id) values (:p1, :p2)', ('Matt Kromer', \
 1))">
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('insert into test (name, id) values (:1, :2)', 'Matt Kromer', 1)"\
 >
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<T "Example: multiple row insert">
<P "Normal">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle.Connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.execute('insert into test (name, id) values (:p1, :p2)', (['Matt Kromer',\
  'Jens Vagelpohl'], [1, 2]))">
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code" firstIndent:500 leftIndent:1000 >
<T "import DCOracle2">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "db = DCOracle2.connect('scott/tiger')">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c = db.cursor()">
<P "Code" firstIndent:500 leftIndent:1000 >
<T "c.executemany('insert into test (name, id) values (:1, :2)', (('Matt Kromer\
 ', 1), ('Jens Vagelpohl', 2)))">
<P "Code" firstIndent:500 leftIndent:1000 >
<P "Code">
<T "DCOracle2 supports the list mode of aruments to execute() in a compatible w\
 ay with DCOracle, but requires the parameter notation to be changed.">
<P "Normal">
<P "Normal">
<T "DCOracle uses the dbiRaw object to access LONG data; DCOracle2 stores LONG \
 data as strings and uses type coercion.  DCOracle2 provides a compatible DCOra\
 cle2.dbiRaw function which will return a DCOracle2.Binary object.">
<P "Normal">
<P "Normal">
<T "DCOracle2 uses different date handling than DCOracle.  The DCOracle dbiDate\
  constructor is not supported, use the API 2.0 date and time constructors inst\
 ead.">
<P "Normal">
<P "Normal">
<page_break>
<T "Type Conversion Rules">
<P "Heading">
<T "The type conversion for the C layer of DCOracle2 uses the following rules (\
 they are not necessarily the correct rules, but this the current implementatio\
 n):">
<P "Normal">
<P "Normal">
<T "Input types are converted in the internal function bindObject and obey the \
 following rules:">
<P "Normal">
<P "Normal">
<T "1.^ajIf the object is None, bind the input as NULL.">
<P "Normal" leftIndent:250 >
<T "2.^ajIf the object is a BindingArray, set the column for array input/output\
 .">
<P "Normal" leftIndent:250 >
<T "3.^ajIf the object is a Cursor, bind the column as an SQL Result Set (SQLT_\
 RSET).">
<P "Normal" leftIndent:250 >
<T "4.^ajIf the object is an OracleDate, bind the column as a a Date (SQLT_DAT)\
 .">
<P "Normal" leftIndent:250 >
<T "5.^ajIf the object is a String, bind the column as a string (SQLT_STR).">
<P "Normal" leftIndent:250 >
<T "6.^ajIf the object is a Long, bind the column as an integer (SQLT_INT).">
<P "Normal" leftIndent:250 >
<T "7.^ajIf the object is an Integer, bind the column as an integer (SQLT_INT).\
 ">
<P "Normal" leftIndent:250 >
<T "8.^ajIf the object is a Float, bind the column as a float (SQLT_FLT).">
<P "Normal" leftIndent:250 >
<P "Normal">
<T "However, the DCOracle2 Python layer will pass type conversion overrides to \
 the C layer if the object is a TypeCoercion(value, type).  The input type over\
 ride is either a string constant or a numeric value representing the SQL data \
 type, e.g. 'SQLT_STR' for string.  Unsupported column types can be coerced fro\
 m string data in this fashion.">
<P "Normal">
<P "Normal">
<T "Output types are converted by lookup in a type table.  This table is:">
<P "Normal">
<P "Normal">
<RS>
<T "Type Name" bold size:8 >
<P "Cell" bold size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Descripton" bold size:8 >
<P "Cell" bold size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Coercion" bold size:8 >
<P "Cell" bold size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Internal Type" bold size:8 >
<P "Cell" bold size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Result Object" bold size:8 >
<P "Cell" bold size:8  lB:0:0:"" rB:0:0:"" tB:0:0:"" bB:0:0:"" hB:0:0:"" vB:0:0\
 :"" shading:18:"":"":"" horizontalMargin:0 verticalMargin:0 dropShadow:0  noFr\
 ame >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CHR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NUM" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "SQLT_STR" size:8 >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Automatic" size:8 >
<S_F fieldType:4 botPage footnote "1"
<start_eval_value>
<T "1" position:3 >
<end_eval_value>
>
<T "footnote">
<FV>
<T "1" size:8 position:3 >
<E_F>
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_INT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Integer" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Integer" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_FLT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Float" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Float" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_STR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VNU" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Length Prefixed Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_PDN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Packed Decimal Number" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LNG" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Long" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VCS" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Variable Character" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NON" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Null/Empty PCC desc" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RID" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Row ID" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_DAT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Date" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "OracleDate" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VBI" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary VCS format" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BIN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary data" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LBI" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Long binary data" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_UIN" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Unsigned Integer" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_SLS" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Display sign leading" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LVC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Longer longs (char)" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LVB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Longer longs (binary)" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_AFC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI Fixed Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "String" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_AVC" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI Var Char" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CUR" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Cursor" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RDD" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Rowid Descriptor" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "SQLT_RID" size:8 >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_LAB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Label" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_OSL" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OS Label" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NTY" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Named Type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_REF" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Reference Type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CLOB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "CLOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "LobLocator" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BLOB" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "BLOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "Yes" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "LobLocator" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_BFILE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Binary File LOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_CFILE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Character File LOB" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_RSET" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Result set" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_NCO" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Named collection" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_VST" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OCIString type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_ODT" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "OCIDate type" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_DATE" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "ANSI date" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIME" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Time" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIME_TZ" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Time with zone" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIMESTAMP" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Timestamp" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<RS>
<T "SQLT_TIMESTAMP_TZ" size:8 >
<P "Cell" size:8 >
<CE width:1678 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<T "Timestamp with zone" size:8 >
<P "Cell" size:8 >
<CE width:2300 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4\
 :0:"Black" >
<P "Cell" size:8 >
<CE width:889 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "No" size:8 >
<P "Cell" size:8 >
<CE width:823 lm:100 rm:100  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black" bB:4:\
 0:"Black" >
<T "--" size:8 >
<P "Cell" size:8 >
<CE width:1156 lm:100 rm:100 last  lB:4:0:"Black" rB:4:0:"Black" tB:4:0:"Black"\
  bB:4:0:"Black" >
<P "Normal">
<T "The result object column, if ``--'' means that there is no type converter f\
 or this type, and that only the raw interface from dco2's ResultSet object can\
  get at the value.  When an output type is coerced, it is requested from Oracl\
 e as the type specified instead of the original format.">
<P "Normal">
<section  next_page pageWidth:8500 pageHeight:11000 leftMargin:1000 rightMargin\
 :1000 topMargin:1000 bottomMargin:1000 bindingMargin:0 paperSize:1 duplex:1 gu\
 tterWidth:500 evenHeader:Inherit evenFooter:Inherit sectNumFmt:-1 sectPageSep:\
 "-" pageNumFmt:0 pageNumCtl:0>
<end_flow>
<start_hdrftr "_AX_HF_1">
<P "HdrFtr">
<end_hdrftr>
<start_hdrftr "_AX_HF_2">
<P "HdrFtr" justifyCenter >
<end_hdrftr>
<start_hdrftr "_AX_HF_3">
<P "HdrFtr" size:8 >
<end_hdrftr>
<start_hdrftr "_AX_HF_4">
<P "HdrFtr" size:8 >
<end_hdrftr>
<start_footnote "1">
<S_F fieldType:5
<start_eval_value>
<T "1" position:3 >
<end_eval_value>
>
<T "footnote_body">
<FV>
<T "1" size:8 position:3 >
<E_F>
<T "Automatic format means conversion to Float if the scale is greater than zer\
 o or the precision and scale are zero; conversion to Integer if the scale is l\
 ess than 10, or conversion to Long otherwise." size:8 >
<P "Footnote" size:8 >
<end_footnote>
<start_hdrftr "_AX_HF_7">
<T "DCOracle2 Users's Guide & Reference">
<P "HdrFtr" justifyCenter >
<end_hdrftr>
<start_hdrftr "_AX_HF_9">
<T "Page " size:10 >
<S_F fieldType:19
<start_eval_value>
<T "???">
<end_eval_value>
>
<T "page_number">
<FV>
<T "???" size:10 >
<E_F>
<T "^aj^ajCopyright ^kj  2002 Zope Corporation" size:10 >
<P "HdrFtr" justifyLeft  size:10 >
<end_hdrftr>
<start_hdrftr "_AX_HF_10">
<T "Copyright ^kj 2002 Zope Corporation^aj^ajPage " size:10 >
<S_F fieldType:19
<start_eval_value>
<T "???">
<end_eval_value>
>
<T "page_number">
<FV>
<T "???" size:10 >
<E_F>
<P "HdrFtr">
<end_hdrftr>
<start_vars>
<V "Language@" 1>
<V "Style$" "letter.aw">
<V "PathName$" "/mirror1/home/matt/wrk/DCO2/doc/DCOracle2.aw">
<V "DocName$" "DCOracle2.aw">
<V "ReadOnly@" 0>
<V "Creator$" "Applix Words">
<V "Created$" "Release 5.00 (build 1315) #18">
<V "AxCreationCodeVersion$" "Mon Mar 27 01:32:58 2000">
<V "CreationDate$" "Fri Jul 14 13:34:36 2000">
<V "CreationUser$" "matt">
<V "Updated$" "Release 5.00 (build 1315) #18">
<V "AxUpdateCodeVersion$" "Mon Mar 27 01:32:58 2000">
<V "UpdateDate$" "Wed Apr 17 10:57:28 2002">
<V "UpdateUser$" "matt">
<V "DocWindowAttrType@" 1>
<V "DocWindowSize$" < 8934 10440>>
<V "PathNameImport$" "/mirror1/home/matt/wrk/DCO2/doc/DCOracle2.aw">
<end_vars>
<end_document>
*END WORDS
